import axios from 'axios';
import Qs from "qs";
import {getToken} from "@/utils/auth";
import router from "@/router";

axios.defaults.timeout = 5000; // 设置访问超时时间
// axios.defaults.withCredentials = true;  // 设置允许跨域访问
// Content-Type 相应头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
// 基础URL 访问的
// axios.defaults.baseURL = "http://47.96.191.193:8081/try/";
axios.defaults.baseURL = "http://127.0.0.1:8081/try/";

// 响应拦截器  返回的情况 获取
axios.interceptors.response.use(
    response => {
        // 如果response里面的status是200，说明访问到接口了 ，否则错误
        if (response.status === 200) {
            return Promise.resolve(response);  // 接着执行程序，访问接口
        } else {
            return Promise.reject(response);  // 结束访问接口
        }
    },
    error => {
        if (error.response.status) {
            switch (error.response.status) {
                case 401 :  // 未登录
                    router.replace({
                        path: '/',
                        query: {
                            redirect: router.currentRoute.fullPath
                        }
                    });
                    break;
                case 404 : // 没找到
                    break;
            }
            return Promise.reject(error.response);
        }
    }
);

// request interceptor
// axios.interceptors.request.use(
//     config => {
//         // do something before request is sent
//
//         if (store.getters.token) {
//             // let each request carry token
//             // ['X-Token'] is a custom headers key
//             // please modify it according to the actual situation
//             config.headers['token'] = getToken()
//         }
//         return config
//     },
//     error => {
//         // do something with request error
//         console.log(error) // for debug
//         return Promise.reject(error)
//     }
// )

/**
 *  封装get方法
 */
export function get(url, params = {}) {
    return new Promise(
        (resolve, reject) => {
            axios.get(url, {params: params, headers: {token: getToken()}})
                .then(response => {
                    resolve(response.data);
                })
                .catch(err => {
                    reject(err);
                })
        }
    );
}


/**
 *  封装post方法
 */
export function post(url, data = {}) {
    return new Promise(
        (resolve, reject) => {
            axios.post(url, Qs.stringify(data), {
                headers: {token: getToken()}
            })
                .then(response => {
                    resolve(response.data);
                })
                .catch(err => {
                    reject(err);
                })
        }
    );
}

/**
 * 封装post 方法 自定义添加 响应类型
 * @param data 数据
 * @returns {Promise<unknown>}
 */
export function postSetting(data) {
    return new Promise(
        (resolve, reject) => {
            axios.post(data.url, Qs.stringify(data.data), {
                responseType: data.responseType,
                headers: {token: getToken()}
            })
                .then(response => {
                    resolve(response);
                })
                .catch(err => {
                    reject(err);
                })
        }
    )
}
